Users have access to increasing amounts of data in an ever increasing variety of ways. For example, a user may access a website and receive a broadcast of a concert event, i.e. a webcast. Additionally, a user may access games and other applications over a wireless network using a wireless phone. To provide this data to a user, data may be streamed from a server to a client over a network for rendering by the client. The user may then interact with the rendered data, such as by watching a movie, listening to a song, and so on.
Streaming data provides increased functionality to a user such that the user may quickly receive the data. Without streaming, if the entire amount of the data was needed to be received from a server before it was output by a client, the user may experience a delay in rendering the data at the client. By streaming the data, the delay encountered by the user may be lessened. Data streaming may be used to provide “real-time” rendering of data.
To stream data, data is transmitted from the server in a streaming or continuous fashion, generally using packets, for rendering at a client as the data arrives, as opposed to data that is not rendered until an entire file which includes the data is available at the client. Streaming may be used for a variety of types of data, such as video data, audio data, media data, and the like. A stream of video data provides a sequence of “moving images” that are transmitted and rendered when the images arrive. Likewise, a stream of audio data provides sound data that is played as the audio data arrives. A stream of media data includes both audio and video data.
Streaming data may be compressed to efficiently stream the data from the server over the network to the client and to increase the utility of the streamed data. For example, a network that communicatively couples the server to the client may have limited bandwidth. The limited bandwidth may limit the amount of data that may be communicated from the server to the client at any one time, and therefore the functionality provided to the client when streaming data over the network. For instance, video data that is streamed may be limited to lower resolutions due to limited bandwidth than would otherwise be the case if a higher-bandwidth network were utilized. Therefore, a user desiring higher resolution streaming video data may be forced to invest in a higher bandwidth connection. By compressing the streaming data, more data may be transferred over low-bandwidth networks at any one time and therefore improve the utility of the streamed data.
When compressing streaming data, however, additional complications may be encountered as opposed to compressing an entire set of data, e.g. block compressing. For example, to compress an entire movie at once, a compression routine may examine the entire amount of data that makes up the movie to compress the data. The compression routine may provide representations of common sequences that are included throughout the data that makes up the movie. Streaming data, however, may be provided for “real-time” rendering of the data. Therefore, there may be a limited amount of time to analyze streaming data to provide real-time rendering of the data by the client. Additionally, there may be a limited amount of data that is available for comparison at any one time to provide representations of common sequences.
Accordingly, there is a continuing need for data compression.